#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<assert.h>
//char* my_strstr(const char* e1, const char* e2)
//{
//	assert(e1 && e2);
//	if (!*e2)
//	{
//		return (char*)e1;
//	}
//	const char* q2 = NULL;
//	const char* q3 = NULL;
//	while (*e1)
//	{
//		q2 = e1;
//		q3 = e2;
//		while (*q2 && *q3 && *q2 == *q3)
//		{
//			q2++;
//			q3++;
//		}
//		if (!*q3)
//		{
//			return (char*)e1;
//		}
//		e1++;
//	}
//	return NULL;
//}
//int main()
//{
//	char arr1[] = "abccccpdd";
//	char arr2[] = "cpdd";
//	char* ch = my_strstr(arr1, arr2);
//	printf("%s ", ch);
//	return 0;
//}
//bubble
//void exchange(char* e1, char* e2,size_t sz)
//{
//	assert(e1 && e2);
//	char* ch = NULL;
//	while (sz--)
//	{
//		ch = e1;
//		e1 = e2;
//		e2 = ch;
//		e1++;
//		e2++;
//	}
//	
//}
//int int_cmp(void* e1, void* e2)
//{
//	return (*(int*)e1 - *(int*)e2);
//}
//
//void bubble(void* arr, size_t sz, size_t size, int(*fun)(void*, void*))
//{
//	assert(arr);
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < sz - 1; i++)
//	{
//		for (j = 0; j <= sz - 1 - i; j++)
//		{
//			if (fun(((char*)arr + j * size), ((char*)arr + ((j + 1) * size))) > 0)
//			{
//				exchange((char*)arr + j * size, (char*)arr + ((j + 1) * size),size);
//			}
//		}
//	}
//}
//
//int main()
//{
//	int arr[10] = { 7,4,9,8,3,2,6,1,5,0 };
//	size_t sz = sizeof(arr) / sizeof(arr[0]);
//	bubble(arr, sz, sizeof(arr[0]), int_cmp);
//	return 0;
//}
//strstr
//char* my_strstr(const char* e1, const char* e2)
//{
//	assert(e1 && e2);
//	if (!*e2)
//	{
//		return (char*)e1;
//	}
//	const char* q1 = NULL;
//	const char* q2 = NULL;
//	while (*e1)
//	{
//		q1 = e1;
//		q2 = e2;
//		while (*q1 && *q2 && *q1 == *q2)
//		{
//			q1++;
//			q2++;
//		}
//		if (!*q2)
//		{
//			return (char*)e1;
//		}
//		e1++;
//	}
//	return NULL;
//}
//char* my_strstr(const char* e1, const char* e2)
//{
//	assert(e1 && e2);
//	if (!*e2)
//	{
//		return (char*)e1;
//	}
//	const char* q2 = NULL;
//	const char* q3 = NULL;
//	while (*e1)
//	{
//		q2 = e1;
//		q3 = e2;
//		while (*q2 && *q3 && *q2 == *q3)
//		{
//			q2++;
//			q3++;
//		}
//		if (!*q3)
//		{
//			return (char*)e1;
//		}
//		e1++;
//	}
//	return NULL;
//}
//int main()
//{
//	char arr1[] = "abcdcccpdd";
//	char arr2[] = "cpdd";
//	char* ch = my_strstr(arr1, arr2);
//	printf("%s ", ch);
//	return 0;
//}
//void exchange(void* e1, void* e2,size_t num)
//{
//	assert(e1 && e2);
//	char ch = 0;
//	while (num--)
//	{
//		ch = (*(char*)e1);
//		(*(char*)e1) = (*(char*)e2);
//		(*(char*)e2) = ch;
//		e1 = (char*)e1 + 1;
//		e2 = (char*)e2 + 1;
//	}
//}
//int int_cmp(void* e1, void* e2)
//{
//	return (*(int*)e1 - *(int*)e2);
//}
//
//void bubble(void* arr, size_t sz, size_t size, int(*fun)(void*, void*))
//{
//	assert(arr);
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < sz - 1; i++)
//	{
//		for (j = 0; j < sz - 1 - i; j++)
//		{
//			if (fun(((char*)arr + j * size), ((char*)arr + ((j + 1) * size))) > 0)
//			{
//				exchange(((char*)arr + j * size), ((char*)arr + ((j + 1) * size)),size);
//			}
//		}
//	}
//}
//
//int main()
//{
//	int arr[] = { 8,2,7,5,9,4,6,3,0,1 };
//	size_t sz = sizeof(arr) / sizeof(arr[0]);
//	bubble(arr, sz, sizeof(arr[0]), int_cmp);
//	return 0;
//}
//strstr
//char* my_strstr(const char* e1,const char* e2)
//{
//	assert(e1 && e2);
//	if (!*e2)
//	{
//		return  (char*)e1;
//	}
//	const char* q1 = NULL;
//	const char* q2 = NULL;
//	while (*e1)
//	{
//		q1 = e1;
//		q2 = e2;
//		while (*q1 && *q2 && *q1 == *q2)
//		{
//			q1++;
//			q2++;
//		}
//		if (!*q2)
//		{
//			return e1;
//		}
//		e1++;
//	}
//}
//int main()
//{
//	char arr1[] = "abcdefcccpdd";
//	char arr2[] = "cpdd";
//	char* ch = my_strstr(arr1, arr2);
//	printf("%s ", ch);
//	return 0;
//}
//void exchange(void* bf1, void* bf2,size_t sz)
//{
//	assert(bf1 && bf2);
//	char ch = 0;
//	while (sz--)
//	{
//		ch = (*(char*)bf1);
//		(*(char*)bf1) = (*(char*)bf2);
//		(*(char*)bf2) = ch;
//		bf1 = (char*)bf1 + 1;
//		bf2 = (char*)bf2 + 1;
//	}
//}
//int int_cmp(void* e1, void* e2)
//{
//	return (*(int*)e1 - *(int*)e2);
//}
//
//void bubble(void* e, size_t sz, size_t size, int(*fun)(void*, void*))
//{
//	assert(e);
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < sz - 1; i++)
//	{
//		for (j = 0; j < sz - 1 - i; j++)
//		{
//			if (fun(((char*)e + j * size), ((char*)e + ((j + 1) * size))) > 0)
//			{
//				exchange(((char*)e + j * size), ((char*)e + ((j + 1) * size)),size);
//			}
//		}
//	}
//}
//int main()
//{
//	int arr1[] = { 6,3,8,1,2,9,8,0,7,4 };
//	size_t sz = sizeof(arr1) / sizeof(arr1[0]);
//	bubble(arr1, sz, sizeof(arr1[0]), int_cmp);
//	return 0;
//}
//strstr
//char* my_strstr(const char* e1, const char* e2)
//{
//	assert(e1 && e2);
//	if (!*e2)
//	{
//		return (char*)e1;
//	}
//	const char* q1 = NULL;
//	const char* q2 = NULL;
//	while (*e1)
//	{
//		q1 = e1;
//		q2 = e2;
//		while (*q1 && *q2 && *q1 == *q2)
//		{
//			q1++;
//			q2++;
//		}
//		if (!*q2)
//		{
//			return (char*)e1;
//		}
//		e1++;
//	}
//	return NULL;
//}
//
//int main()
//{
//	char arr1[] = "abcdecccpdd";
//	char arr2[] = "cpdd";
//	char* ch = my_strstr(arr1, arr2);
//	printf("%s ", ch);
//	return 0;
//}
 